﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using BUS;
using DTO;

namespace Nhom16_PTTKHTTT_12HCB
{
    public partial class frmQuanLyNhanVien : DevComponents.DotNetBar.Office2007Form
    {
        public frmQuanLyNhanVien()
        {
            InitializeComponent();
        }

        private void frmNhanVien_Load(object sender, EventArgs e)
        {
            LoadDanhSachNhanVienGrid();
            LoadDanhSachCa();
            LoadDanhSachChucVu();
            LoadDanhSachNhanVien();
            if (dgvDanhSachNhanVien.Rows.Count != 0)
            {
                dgvDanhSachNhanVien.Rows[0].Selected = true;
                XemChiTietNhanVien(0);
            }
        }

        private void LoadDanhSachNhanVien()
        {
            NhanVien_BUS nvb = new NhanVien_BUS();
            DataTable dt = nvb.LoadDanhSachNhanVien();
            dgvDanhSachNhanVien.DataSource = dt;
        }

        private void LoadDanhSachChucVu()
        {
            ChucVu_BUS cvb = new ChucVu_BUS();
            DataTable dt = cvb.LoadDanhSachChucVu();
            cbxChucVu.DataSource = dt;
            cbxChucVu.DisplayMember = "TenChucVu";
            cbxChucVu.ValueMember = "MaChucVu";
        }

        private void dgvDanhSachNhanVien_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            int Rowindex = dgvDanhSachNhanVien.SelectedRows[0].Index;
            XemChiTietNhanVien(Rowindex);
        }

        private void XemChiTietNhanVien(int RowIndexx)
        {
            string MaNhanVien = dgvDanhSachNhanVien.Rows[dgvDanhSachNhanVien.SelectedRows[0].Index].Cells[0].Value.ToString();
            NhanVien_BUS nvb = new NhanVien_BUS();
            DataTable dt = new DataTable();
            dt = nvb.XemChiTietNhanVien(MaNhanVien);
            txtMaNhanVien.Text = dt.Rows[0].ItemArray[0].ToString();
            txtHoTen.Text = dt.Rows[0].ItemArray[1].ToString();
            txtDiaChi.Text = dt.Rows[0].ItemArray[2].ToString();
            txtEmail.Text = dt.Rows[0].ItemArray[3].ToString();
            txtDienThoai.Text = dt.Rows[0].ItemArray[4].ToString();
            txtTenDangNhap.Text = dt.Rows[0].ItemArray[5].ToString();
            txtMatKhau.ReadOnly = true;
            txtMatKhau.Text = "************";
            cbxChucVu.SelectedValue = dt.Rows[0].ItemArray[7].ToString();
        }

        private void LoadDanhSachCa()
        {            
            Ca_BUS cb = new Ca_BUS();
            dgvCa.DataSource = cb.LayDanhSachCa();                        
        }

        private void LoadDanhSachNhanVienGrid()
        {
            NhanVien_BUS nvb = new NhanVien_BUS();
            DataTable dt = new DataTable();
            dt = nvb.LoadDanhSachNhanVien();
            Ca_BUS cb = new Ca_BUS();
            dgvPhanCong.Columns.Clear();
            DataGridViewTextBoxColumn columnMaNhanVien = new DataGridViewTextBoxColumn();
            columnMaNhanVien.HeaderText = "Mã Nhân Viên";
            DataGridViewTextBoxColumn columnTenNhanVien = new DataGridViewTextBoxColumn();
            columnTenNhanVien.HeaderText = "Họ Tên";
            DataGridViewTextBoxColumn columnChucVu = new DataGridViewTextBoxColumn();
            columnChucVu.HeaderText = "Chức Vụ";
            dgvPhanCong.Columns.Add(columnMaNhanVien);
            dgvPhanCong.Columns.Add(columnTenNhanVien);
            dgvPhanCong.Columns.Add(columnChucVu);
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                string[] arr = new string[] { dt.Rows[i].ItemArray[0].ToString(), dt.Rows[i].ItemArray[1].ToString(), dt.Rows[i].ItemArray[2].ToString()};                                
                dgvPhanCong.Rows.Add(arr);
            }
        }
        
        private void dipDenNgay_ValueChanged(object sender, EventArgs e)
        {
            XetPhanCong();
        }

        private void XetPhanCong()
        {
            dgvPhanCong.Columns.Clear();
            DataGridViewTextBoxColumn columnMaNhanVien = new DataGridViewTextBoxColumn();
            columnMaNhanVien.HeaderText = "Mã Nhân Viên";
            DataGridViewTextBoxColumn columnTenNhanVien = new DataGridViewTextBoxColumn();
            columnTenNhanVien.HeaderText = "Họ Tên";
            DataGridViewTextBoxColumn columnChucVu = new DataGridViewTextBoxColumn();
            columnChucVu.HeaderText = "Chức Vụ";

            dgvPhanCong.Columns.Add(columnMaNhanVien);
            dgvPhanCong.Columns.Add(columnTenNhanVien);
            dgvPhanCong.Columns.Add(columnChucVu);

            NhanVien_BUS nvb = new NhanVien_BUS();
            DataTable dt = new DataTable();
            dt = nvb.LoadDanhSachNhanVien();
            Ca_BUS cb = new Ca_BUS();
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                string[] arr = new string[] { dt.Rows[i].ItemArray[0].ToString(), dt.Rows[i].ItemArray[1].ToString(), dt.Rows[i].ItemArray[2].ToString() };
                dgvPhanCong.Rows.Add(arr);
            }

            TimeSpan TimeSpan = new TimeSpan();            
            TimeSpan = dipDenNgay.Value - DateTime.Now;
            int KhoangThoiGianToiNgay = TimeSpan.Days;
            
            if(KhoangThoiGianToiNgay < 0)
            {
                MessageBox.Show(" Giá trị tới ngày không đúng.", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                TimeSpan time = dipDenNgay.Value - dipTuNgay.Value;
                int SoNgay = time.Days;
                if (SoNgay > 7)
                {
                    MessageBox.Show("Một phân công không quá một tuần", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else if (SoNgay <= 0)
                {
                    MessageBox.Show("Chọn sai khoảng thời gian.", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else
                {
                    DateTime NgayBatDau = dipTuNgay.Value;
                    for (int i = 0; i < SoNgay; i++)
                    {
                        DataGridViewComboBoxColumn column = new DataGridViewComboBoxColumn();
                        column.HeaderText = NgayBatDau.ToShortDateString();
                        column.DataSource = cb.LayDanhSachCa();
                        column.DisplayMember = "TenCa";
                        column.ValueMember = "MaCa";

                        dgvPhanCong.Columns.Add(column);
                        NgayBatDau = TimNgayTiepTheo(NgayBatDau);
                    }
                }
            }
        }

        private DateTime TimNgayTiepTheo(DateTime NgayHienTai)
        {
            DateTime NgayTiepTheo = new DateTime();
            int Ngay = NgayHienTai.Day;
            int Thang = NgayHienTai.Month;
            int Nam = NgayHienTai.Year;

            if (Thang == 1 || Thang == 3 || Thang == 5 || Thang == 7 || Thang == 8 || Thang == 10 || Thang == 12)
            {
                if (Ngay < 31)
                {
                    Ngay += 1;
                }
                else
                {
                    if (Thang == 12)
                    {
                        Ngay = 1;
                        Thang = 1;
                        Nam += 1;
                    }
                    else
                    {
                        Ngay = 1;
                        Thang += 1;
                    }
                }
            }
            else if (Thang == 2 || Thang == 4 || Thang == 6 || Thang == 9 || Thang == 11)
            {
                if (Ngay < 30)
                {
                    Ngay += 1;
                }
                else
                {
                    Ngay = 1;
                    Thang += 1;
                }
            }
            else if (Thang == 2)
            {
                if ((Nam % 4 == 0 && Nam % 100 != 0) || (Nam % 400 == 0))
                {
                    if (Ngay < 29)
                    {
                        Ngay += 1;
                    }
                    else
                    {
                        Ngay = 1;
                        Thang = 3;
                    }
                }
                else
                {
                    if (Ngay < 28)
                    {
                        Ngay += 1;
                    }
                    else
                    {
                        Ngay = 1;
                        Thang = 3;
                    }
                }
            }
            string strDate = Thang + "/" + Ngay + "/" + Nam;
            NgayTiepTheo = DateTime.Parse(strDate);
            return NgayTiepTheo;
        }

        private void btnPhanCong_Click(object sender, EventArgs e)
        {
            PhanCong_BUS pcb = new PhanCong_BUS();
            DataTable dt = new DataTable();
            PhanCong PhanCong = new DTO.PhanCong();
            PhanCong.NgayBatDau = dipTuNgay.Value;
            PhanCong.NgayKetThuc = dipDenNgay.Value;
            dt = pcb.ThemMoiPhanCong(PhanCong);
            string MaPhanCong = dt.Rows[0].ItemArray[0].ToString();
            for (int i = 0; i < dgvPhanCong.Rows.Count; i++)
            {
                string MaNhanVien = dgvPhanCong.Rows[i].Cells[0].Value.ToString();
                for (int j = 3; j < dgvPhanCong.Columns.Count; j++)
                {
                    DateTime NgayPhanCong = DateTime.Parse(dgvPhanCong.Columns[j].HeaderText);
                    if (dgvPhanCong.Rows[i].Cells[j].Value != null)
                    {
                        string MaCa = dgvPhanCong.Rows[i].Cells[j].Value.ToString();

                        CTPhanCong_BUS ctpcb = new CTPhanCong_BUS();
                        CTPhanCong ctpc = new CTPhanCong();
                        ctpc.MaPhanCong = MaPhanCong;
                        ctpc.NgayPhanCong = NgayPhanCong;
                        ctpc.MaCa = MaCa;
                        ctpc.MaNV = MaNhanVien;
                        ctpcb.ThemMoiPhanCong(ctpc);
                    }
                }
            }
            MessageBox.Show("Phân công thành công.", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void btnNhapLai_Click(object sender, EventArgs e)
        {
            txtMaNhanVien.Text = string.Empty;
            txtHoTen.Text = string.Empty;
            txtDiaChi.Text = string.Empty;
            txtEmail.Text = string.Empty;
            txtDienThoai.Text = string.Empty;
            txtTenDangNhap.Text = string.Empty;
            txtMatKhau.Text = string.Empty;
            txtMatKhau.ReadOnly = false;
            cbxChucVu.SelectedItem = 0;
        }

        private void btnThemMoi_Click(object sender, EventArgs e)
        {
            if(txtHoTen.Text == string.Empty)
            {
                MessageBox.Show("Chưa nhập họ tên.", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtHoTen.Focus();
            }
            else if(txtDiaChi.Text == string.Empty)
            {
                MessageBox.Show("Chưa nhập địa chỉ.", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtDiaChi.Focus();
            }
            else if (txtEmail.Text == string.Empty)
            {
                MessageBox.Show("Chưa nhập email.", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtEmail.Focus();
            }
            else if (txtDienThoai.Text == string.Empty)
            {
                MessageBox.Show("Chưa nhập số điện thoại.", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtDienThoai.Focus();
            }
            else if (txtTenDangNhap.Text == string.Empty)
            {
                MessageBox.Show("Chưa nhập tên đăng nhập.", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtTenDangNhap.Focus();
            }
            else if (txtMatKhau.Text == string.Empty)
            {
                MessageBox.Show("Chưa nhập mật khẩu.", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtMatKhau.Focus();
            }
            else
            {
                NhanVien NhanVien = new NhanVien();
                NhanVien.MaNV = txtMaNhanVien.Text;
                NhanVien.TenNV = txtHoTen.Text;
                NhanVien.DiaChi = txtDiaChi.Text;
                NhanVien.Email = txtEmail.Text;
                NhanVien.DienThoai = txtDienThoai.Text;
                NhanVien.TenDN = txtTenDangNhap.Text;
                NhanVien.MatKhau = Functions.ToMD5(txtMatKhau.Text);
                NhanVien.MaChucVu = cbxChucVu.SelectedValue.ToString();

                NhanVien_BUS nvb = new NhanVien_BUS();
                if (nvb.ThemMoiNhanVien(NhanVien))
                {
                    MessageBox.Show("Thêm mới nhân viên thành công.", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    LoadDanhSachNhanVien();
                    dgvDanhSachNhanVien.Rows[dgvDanhSachNhanVien.Rows.Count - 1].Selected = true;
                    XemChiTietNhanVien(dgvDanhSachNhanVien.Rows.Count - 1);
                }
            }
        }
        
        private void lbThemMoiLoaiNhanVien_Click(object sender, EventArgs e)
        {
            frmThemMoiChucVu FormThemMoiChucVu = new frmThemMoiChucVu();
            FormThemMoiChucVu.ShowDialog();
            LoadDanhSachChucVu();
        }

        private void dipTuNgay_ValueChanged(object sender, EventArgs e)
        {
            TimeSpan TimeSpan = new TimeSpan();
            TimeSpan = dipTuNgay.Value - DateTime.Now;
            int KhoangTuNgay = TimeSpan.Days;            
            if (KhoangTuNgay < 0)
            {
                MessageBox.Show("Chỉ được phân cồng bắt đầu từ hôm nay.", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
    }
}
